/**
 * Description:
 * Class Name:MethodParameterTest
 * Date:2022/4/30 13:21
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第18章_类加载机制与反射._18_3_通过反射查看信息._18_3_3_方法参数反射;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.List;

class Test{
    public void replace(String str, List<String> list){}
}

public class MethodParameterTest {
    public static void main(String[] args) throws Exception {
        // 获取String的类
        Class<Test> clazz = Test.class;
        // 获取String类的两个参数的replace()方法
        Method replace = clazz.getMethod("replace", String.class, List.class);
        // 获取指定方法的参数个数
        System.out.println("replace的方法参数个数：" + replace.getParameterCount());
        // 获取指定方法的所有参数信息
        Parameter[] parameters = replace.getParameters();
        var index = 1;
        for (var p :
                parameters) {
            if (p.isNamePresent()) {
                System.out.println("---第" + index++ + "个参数信息---");
                System.out.println("参数名：" + p.getName());
                System.out.println("形参类型：" + p.getType());
                System.out.println("泛型类型：" + p.getParameterizedType());
            }
            }
    }
}
//replace的方法参数个数：2
//---第1个参数信息---
//参数名：str
//形参类型：class java.lang.String
//泛型类型：class java.lang.String
//---第2个参数信息---
//参数名：list
//形参类型：interface java.util.List
//泛型类型：java.util.List<java.lang.String>
